﻿namespace BaseSyntax.GenericTest
{
	public class Contravariance:ITest
	{
		private object GetO1(object s1)
		{
			return new object();
		}

		private string GetO2(string o)
		{
			return "";
		}

		public void Test()
		{
			// 返回类型可以被转化为基类(string->object)，但是无法转化成子类
			// 所以返回类型需要协变
			// string GetO2(string)=> object GetO2(string)
			object o2 = GetO2("aa");
			
			// 函数实际从GetO1(object)变成了GetO1(string)，
			//所以参数要抗变
			object o1 = GetO1("aa");
		}
	}
}